package cn.mayday.algorithms.year2021.month1.A普通业务处理;

import java.util.List;

/**
 * @author Mayday05
 * @date 2021/5/12 17:02
 */
public class DaHe1 {

/*
 问题：目前有一个文件层级和数量都比较多的目录，
 需要在其中找到一个特定的文件，
*/

    public static void main(String[] args) {

    }

    public static Item searchFileByName(Item item, String searchName) throws Exception {
        if (searchName == null || searchName.trim().equalsIgnoreCase("")) {
            throw new Exception("搜索的文件名不能为空");
        }
        if (item == null) {
            return null;
        }
        // 如果是文件，直接比较
        if (item.itemType == ItemType.file && item.name.equalsIgnoreCase(searchName)) {
            return item;
        } else if (item.itemType == ItemType.direct) {
            // 如果是文件夹，判断不是空文件件后，递归遍历，找到一个即停止
            if (item.children != null && item.children.size() > 0) {
                for (int i = 0; i < item.children.size(); i++) {
                    Item temp = searchFileByName(item.children.get(i), searchName);
                    if (temp != null) {
                        return temp;
                    }
                }
            }
        }
        return null;
    }

    public class Item {
        public ItemType itemType;

        public String name;

        public List<Item> children;
    }

    public enum ItemType {
        file,
        direct;
    }

}
